﻿using System;
using System.Collections;
using System.Linq;
using System.Web;

/// <summary>
/// Descripción breve de ControladorReporteSemanal
/// </summary>
public class ControladorReporteSemanal : MySqlClase
{
    ReporteSemanal r;
    ArrayList l, l2;

    /// <summary>
    /// Metodo que regresa una lista string con los grupos que han checado
    /// </summary>
    /// <returns>ArrayList de grupos</returns>
    private ArrayList grupos()
    {
        string sql = "select grupo from checado group by grupo";
        l2 = new ArrayList();
        if (AbrirConexion())
        {
            Consultar(sql);

            while (DatosConsulta.Read())
            {
                l2.Add(DatosConsulta.GetString(0));
            }
        }
        CerrarConexion();
        return l2;
    }

    /// <summary>
    /// metodo que regresa un arreglo con la el grupo y la cantidad maxima de alumnos por grupo y el dia de ese registro
    /// </summary>
    /// <returns></returns>
    public ArrayList listaDeAsistencia(string fecha)
    {
        l = new ArrayList(); l = this.grupos(); //lista con los grupos existentes
        l2 = new ArrayList();//lista que contiene objetos claseReporte (grupo,alumnos, []alumnos maximos)
        string sql;
        ClaseReporte cRep;
        for (int i = 0; i < l.Count; i++)
        {
            if (AbrirConexion())
            {
                //si se manda una fecha como parámetro se usa esta cadena
                //por k significa que está haciendo una busqueda de un reporte pasado
                if (fecha != null)
                {
                    sql = @"SELECT c.grupo, g.alumnos, max(c.asistencia) as max, WEEKDAY(fecha) as numdia 
FROM checado c, grupos g where c.grupo='" + l[i] + "' and c.grupo=g.grupo and Week(fecha) = week('" + fecha + "') group by WEEKDAY(fecha), c.grupo;";
                }

                //si no se envia se refiere a la misma semana en la que se encuentra
                else
                {
                    sql = @"SELECT c.grupo, g.alumnos, max(c.asistencia) as max, WEEKDAY(fecha) as numdia 
FROM checado c, grupos g where c.grupo='" + l[i] + "' and c.grupo=g.grupo and Week(fecha) = week(CURRENT_DATE()) group by WEEKDAY(fecha), c.grupo;";
                }
                /*sql = @"select c.grupo, g.alumnos, max(c.asistencia) as max , MOD(DAYOFWEEK(c.fecha)+5,7)as dia
                        from checado c, grupos g
                        where c.grupo='" + l[i] + "' and g.grupo = c.grupo group by(dia) order by fecha;";*/
                Consultar(sql);

                int[] _arr = new int[5];
                int flag = 0;
                cRep = new ClaseReporte();
                while (DatosConsulta.Read())
                {
                    cRep.Grupo = "" + DatosConsulta["grupo"];
                    cRep.CantdadAlumno = Convert.ToInt32(DatosConsulta["alumnos"]);
                    _arr[Convert.ToInt32(DatosConsulta["numdia"])] = Convert.ToInt32(DatosConsulta["max"]);
                    flag++;
                }
                cRep.Arr = _arr;
                l2.Add(cRep);

            }
            CerrarConexion();
        }
        return l2;
    }
}